﻿function AutoResize(id) {
    var newheight;
    var newwidth;

    if (document.getElementById) {
        newheight = document.getElementById(id).contentWindow.document.body.scrollHeight;
        newwidth = document.getElementById(id).contentWindow.document.body.scrollWidth;
    }

    document.getElementById(id).height = (newheight) + "px";
    document.getElementById(id).width = (newwidth) + "px";
}

function ArrayToTable(container, array) {

    $('#' + container).empty();

    var table = '<table border="1" style="width:100%" class="table table-hover table-bordered">';

    var rows = '';

    $.each(array, function (index, value) {

        var obj = value;

        var row = '<tr>';
        var cols = '';
        $.each(obj, function (i, n) {
            var col = '<td>' + n + '</td>';
            cols = cols + col;
        });

        row = cols + '</tr>';

        rows = rows + row;
    });

    table = table + rows + '</table>';

    $('#' + container).append(table);
}

/*
   Utilizzo:
   LoadDDL('Nome del controllo', 'URL del WebMethod');

   Esempio:
   LoadDDL('selGruppiModelli', 'GestioneProposte.aspx/LoadGruppiModelli');
*/
function LoadDDL(control, method, url, data, global, callback, defaultValue) {
    var m_params = "";

    if (data !== undefined) {

        m_params = data; //JSON.stringify({ id: data });
    }

    $.ajax({
        global: global,
        type: method,
        url: url,
        data: m_params,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        beforeSend: function () {
            //if ($('#' + control) !== undefined) {
            //    $('#' + control).append($('<option>Loading...     </option>'));
            //}
        },
        success: function (msg) {

            var data = null;

            $('#' + control).empty();

            if (!CheckUndefined(msg) && (msg.length > 0)) {
                
                if (defaultValue === undefined) {
                    defaultValue = 'Seleziona un elemento...';
                }

                $('#' + control).append('<option value="-1">' + defaultValue + '</option>');

                for (var i = 0, len = msg.length; i < len; ++i) {
                    $('#' + control).append('<option value="' + msg[i].value + '">' + msg[i].name + '</option>');
                }
                               
                //$('#' + control).append($('<option></option>').attr("value", "-1").text('Seleziona un elemento...'));

                //$.each(msg, function () {
                //    $('#' + control).append($('<option></option>').attr("value", this.value).text(this.name));
                //});
            } else {
                $('#' + control).append($('<option value="-2">Nessun dato disponibile</option>'));
            }

            if (!CheckUndefined(callback)) {
                callback();
            }
        }
    });


}


/*
   send request to the server...
   data: the data to be send to server
   url: the url for the request
   callback: callback function called on success 
*/
function SendToServer(data, url, callback) {

    if (data === undefined) {
    } else {

        var m_data = JSON.stringify({ data: data });

        $.ajax({
            type: "POST",
            url: url,
            data: m_data,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {

                if (CheckUndefined(callback)) {
                    alert(response);
                } else {
                    callback(response);
                }

            },
            error: function (response) {
                alert(response.responseJSON);
            }
        });

    }
}

/* 
   Invia i dati al server.
   Parametri:
   type:             'POST' o 'GET'
   url:              l'url a cui inviare i dati
   data:             il blocco dati
   successCallback:  callback da richiamare in caso di successo
   errorCallback:    callback da richiamare in caso di errore
*/
function SendToServerEx(type, url, data, successCallback, errorCallback) {

    if (data === undefined) {
        alert('Attenzione! Errore nella definizione dei parametri !');
    } else {

        $.ajax({
            type: type,
            url: url,
            data: m_data,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                if (CheckUndefined(successCallback)) {
                    alert(response);
                } else {
                    successCallback(response);
                }
            },
            failure: function (response) {
                if (CheckUndefined(errorCallback)) {
                    alert(response.d);
                } else {
                    errorCallback(response);
                }
            }
        });
    }
}

/* check if object or variable is undefined */
function CheckUndefined(objToCheck) {
    if (typeof (objToCheck) !== 'undefined' && objToCheck != null) {
        return false;
    } else {
        return true;
    }
}

/*
    Get the query string parameters...
    Usage: GetQueryStringParams(THE QUERYSTRING PARAMETER NAME)
*/
function GetQueryStringParams(sParam) {
    var sPageURL = window.location.search.substring(1);
    var sURLVariables = sPageURL.split('&');

    for (var i = 0; i < sURLVariables.length; i++) {
        var sParameterName = sURLVariables[i].split('=');
        if (sParameterName[0] == sParam) {

            /* sanitize formly select values, if necessary */
            var v = sParameterName[1];
            v = v.toLowerCase().replace("string:", "");
            /* sanitize formly select values, if necessary */

            return v;
        }
    }
}

/*
   Utilizzo:
   reset di un campo di tipo input...

   Esempio:
   ResetInputFile($('#myfile'));
*/
function ResetInputFile(e) {
    e.wrap('<form>').parent('form').trigger('reset');
    e.unwrap();
}

/*
  Visualizza un messaggio nella parte alta dello schermo utilizzando gli stili di Bootstrap.

  responseMessage: messaggio di tipo ResponseMessage con le informazioni per visualizzare l'alert adeguato

*/
function ShowResponseMessage(responseMessage) {
    ShowMessage(responseMessage.Message, responseMessage.Type);
}

/*
  Visualizza un messaggio nella parte alta dello schermo utilizzando gli stili di Bootstrap.

  message: messaggio da visualizzare
  type: tipo del messaggio secondo lo stile Bootstrap
        tipo 0 -> 'alert-success'
        tipo 1 -> 'alert-info'
        tipo 2 -> 'alert-warning'
        tipo 3 -> 'alert-danger'
  timeout: timeout dopo il quale il messaggio viene nascosto (OPZIONALE. Se non specificato il default è di 3 secondi)
*/
function ShowMessage(message, type, timeout) {

    if (timeout === undefined) {
        timeout = 3000;
    }

    ShowStaticAlert('#staticMessages', message, type, timeout);
}


/*
    Visualizza un messaggio di alert ( success, warning, error, info ) utilizzando gli stili di Bootstrap
    Il messaggio viene visualizzato in un apposito elemento ( DIV )
    Il messaggio può essere temporizzato mediante il terzo parametro.

    elem: elemento in cui visualizzare il messaggio
    message: messaggio da visualizzare
    type: tipo del messaggio secondo lo stile Bootstrap
          tipo 0 -> 'alert-success'
          tipo 1 -> 'alert-info'
          tipo 2 -> 'alert-warning'
          tipo 3 -> 'alert-danger'
    timeout: timeout dopo il quale il messaggio viene nascosto

    Utilizzo:
    ShowStaticAlert('#form_errors', 'This message will fade out in 1 second', 0, 1000)

    Il DIV da utilizzare per mostrare il messaggio ha la seguente forma:
    <div id="form_errors" class="alert alert-danger fade in" style="display:none">

    //
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
*/
function ShowStaticAlert(elem, message, type, timeout) {
    if (message !== undefined && message != null) {

        var m_type = 'alert-danger';
        switch (type) {
            case 0:
                m_type = 'alert-success';
                break;
            case 1:
                m_type = 'alert-info';
                break;
            case 2:
                m_type = 'alert-warning';
                break;
            case 3:
                m_type = 'alert-danger';
                break;
        }
        
        $(elem).show().html('<div class="alert ' + m_type + '">' + message + '</div>');

        if (timeout || timeout === 0) {
            setTimeout(function () {
                $(elem).hide();
            }, timeout);
        }
    }
};

/*
   Utilizzo:
   LoadDDL('Nome del controllo', 'URL del WebMethod');

   Esempio:
   LoadDDL('selGruppiModelli', 'GestioneProposte.aspx/LoadGruppiModelli');
*/
function LoadDDL___(control, url, data, singleValue) {

    var m_params = "";
    if (data !== undefined) {

        var m_vals = [];
        if (singleValue == 0) {
            var params = data.split(',');

            $.each(params, function () {
                //alert($("input[name*=" + this + "]"));

                if ($("#prop" + $.trim(this)) !== undefined) {
                    m_vals.push({ Name: this, Value: $("#prop" + $.trim(this)).val() });
                } else {
                    m_vals.push({ Name: this, Value: $.trim(this) });
                }
            });
        } else {
            m_vals.push({ Name: 'p1', Value: data });
        }

        m_params = JSON.stringify({ data: m_vals });
    }

    $.ajax({
        type: "POST",
        url: url,
        data: m_params,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        beforeSend: function () {
            //if ($('#' + control) !== undefined) {
            //    $('#' + control).append($('<option>Loading...     </option>'));
            //}
        },
        success: function (msg) {

            var data = null;

            if (CheckUndefined(msg.d)) {
                data = msg;
            } else {
                data = JSON.parse(msg.d);
            }

            if (data == null) {
                alert("LoadDDL Failed. Errore nel caricamento dei dati !!!");
            } else {
                if (data == "") {
                    $('#' + control).empty();
                    $('#' + control).append($('<option value="-1">Nessun dato disponibile</option>'));
                }
                else {
                    //var data = JSON.parse(msg.d);

                    var selected = $('#' + control).val();

                    $('#' + control).empty();

                    if (data.length != 0) {
                        $('#' + control).append($('<option></option>').attr("value", "").text('Seleziona un elemento...'));

                        $.each(data, function () {
                            $('#' + control).append($('<option></option>').attr("value", this.value).text(this.name));
                        });

                        $("#" + control + " option[text='" + selected + "']").prop("selected", "selected");
                    }
                    else {
                        $('#' + control).append($('<option value="-1">Nessun dato disponibile</option>'));
                    }
                }
            }
        }
    });
}

function NewGuid() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,
            function (c) {
                var r = Math.random() * 16 | 0, v = c == 'x'
                        ? r
                        : (r & 0x3 | 0x8);
                return v.toString(16);
            }).toUpperCase();
}

/*
JQuery code snippet for handling ‘show’/’hide’ events using 
.on() method similar to other implicit events...
*/
//(function ($) {
//    $.each(['show', 'hide'], function (i, ev) {
//        var el = $.fn[ev];
//        $.fn[ev] = function () {
//            this.trigger(ev);
//            return el.apply(this, arguments);
//        };
//    });
//})(jQuery);
